Skill

Throwable এবং এর Subclasses

Java Technologies - Java.lang প্যাকেজ (Java.lang Package)
298

java.lang.Throwable হল Java তে একটি গুরুত্বপূর্ণ ক্লাস যা সমস্ত ত্রুটি (error) এবং এক্সসেপশন (exception) ক্লাসের রুট ক্লাস। এটি java.lang প্যাকেজের অংশ এবং exception handling ব্যবস্থার ভিত্তি হিসেবে কাজ করে। Throwable ক্লাসের মাধ্যমে Java তে ত্রুটি (error) এবং ব্যতিক্রম (exception) ব্যবস্থাপনা করা হয়।

Throwable ক্লাসের দুটি প্রধান subclasses রয়েছে:

  1. Error - সিস্টেম সম্পর্কিত গুরুতর ত্রুটিগুলি (যেগুলি সাধারণত ঠিক করা সম্ভব নয়) নির্দেশ করে।
  2. Exception - সাধারনত অ্যাপ্লিকেশনের পক্ষ থেকে সৃষ্ট ত্রুটিগুলি নির্দেশ করে, যা প্রোগ্রাম দ্বারা ধরা এবং হ্যান্ডেল করা যায়।

Throwable ক্লাসের বৈশিষ্ট্য:

  1. Throwable class হল রুট ক্লাস যা Error এবং Exception ক্লাসের মধ্যে একটি সাধারণ সুপার ক্লাস।
  2. Throwable ক্লাসের দুটি প্রধান মেথড রয়েছে:
    • getMessage(): ত্রুটির বার্তা প্রদান করে।
    • printStackTrace(): ত্রুটির স্ট্যাক ট্রেস প্রিন্ট করে, যা ডিবাগিং এ সহায়ক হয়।

সিনট্যাক্স:

public class ThrowableExample {
    public static void main(String[] args) {
        try {
            throw new Exception("An exception occurred");
        } catch (Throwable t) {
            System.out.println(t.getMessage());
            t.printStackTrace();
        }
    }
}

এখানে, Throwable টাইপের অবজেক্ট গ্রহণ করা হচ্ছে, যার মাধ্যমে ExceptionError উভয় ধরনের ত্রুটি ধরা সম্ভব।

Throwable এর Subclasses:

  1. Error ক্লাস:

    • Error ক্লাস ব্যবহার করা হয় গুরুতর ত্রুটি (অর্থাৎ, সিস্টেম সম্পর্কিত ত্রুটি) যেমন, OutOfMemoryError, StackOverflowError ইত্যাদি।
    • Error এক্সসেপশনগুলির অধিকাংশ সময় অ্যাপ্লিকেশন দ্বারা ধরা সম্ভব নয় এবং এই ধরনের ত্রুটিগুলি সাধারণত অ্যাপ্লিকেশন বন্ধ হওয়ার কারণ হয়ে থাকে।

    উদাহরণ:

    public class ErrorExample {
        public static void main(String[] args) {
            try {
                throw new StackOverflowError("Stack overflow error");
            } catch (Error e) {
                System.out.println(e.getMessage());
            }
        }
    }
    

    আউটপুট:

    Stack overflow error
    

    এখানে, StackOverflowError একটি Error subclass যা স্ট্যাকের সীমা অতিক্রম করলে ঘটতে পারে।

  2. Exception ক্লাস:
    • Exception ক্লাস হল এমন সব ত্রুটি যা সাধারণত অ্যাপ্লিকেশন লজিক বা ইউজার ইন্টারঅ্যাকশন থেকে সৃষ্ট হয় এবং যে সব ত্রুটি ব্যবহারের সময় অ্যাপ্লিকেশন দ্বারা ধরা যায়।
    • Exception দুইটি প্রধান subclass এ বিভক্ত:
      • RuntimeException: যা unchecked exceptions হিসেবে পরিচিত। এগুলি সাধারণত প্রোগ্রামিং ত্রুটির কারণে ঘটে, যেমন, NullPointerException, ArrayIndexOutOfBoundsException ইত্যাদি।
      • Checked Exception: যেগুলি compile-time exception হিসেবে পরিচিত এবং যা সাধারনত try-catch ব্লকের মাধ্যমে ধরা হয়, যেমন IOException, SQLException ইত্যাদি।

RuntimeException (Unchecked Exceptions):

  • RuntimeException এর subclass গুলি, যেগুলি অ্যাপ্লিকেশন চলাকালে, ভুল ইনপুট বা প্রোগ্রামিং ত্রুটির কারণে ঘটে।
  • এগুলি unchecked exceptions বলে পরিচিত, কারণ এগুলির জন্য কম্পাইলার কোনো ত্রুটি চেক করে না এবং এগুলিকে প্রোগ্রামিং ত্রুটির ফলে রানটাইমে ক্যাচ করা হয়।

উদাহরণ:

public class RuntimeExceptionExample {
    public static void main(String[] args) {
        try {
            int[] numbers = new int[5];
            numbers[10] = 100;  // ArrayIndexOutOfBoundsException
        } catch (RuntimeException e) {
            System.out.println(e.getMessage());
        }
    }
}

আউটপুট:

Index 10 out of bounds for length 5

এখানে, ArrayIndexOutOfBoundsException একটি RuntimeException subclass যা ঘটে যখন অ্যারে ইনডেক্স সীমানা অতিক্রম করা হয়।

Checked Exception (Checked Exceptions):

  • Checked exceptions হল এমন ত্রুটি যা কম্পাইলার দ্বারা চেক করা হয় এবং প্রোগ্রামারকে এই ত্রুটিগুলি মোকাবেলা করার জন্য try-catch ব্লক বা throws নির্দেশ ব্যবহার করতে হয়।
  • এই ধরনের এক্সসেপশনগুলো সাধারণত I/O অপারেশন, ফাইল এক্সেস, ডাটাবেস কানেকশন ইত্যাদি ক্ষেত্রে ঘটে।

উদাহরণ:

import java.io.*;

public class IOExceptionExample {
    public static void main(String[] args) {
        try {
            FileReader file = new FileReader("non_existing_file.txt");  // IOException
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}

আউটপুট:

non_existing_file.txt (The system cannot find the file specified)

এখানে, IOException একটি Checked Exception যা ঘটে যখন একটি ফাইল খোলার চেষ্টা করা হয় এবং ফাইলটি পাওয়া যায় না।

Throwable ক্লাসের প্রধান মেথড:

  1. getMessage():
    • এটি ত্রুটির সংক্ষিপ্ত বিবরণ প্রদান করে।
  2. printStackTrace():
    • এটি ত্রুটির স্ট্যাক ট্রেস প্রিন্ট করে, যা ডিবাগিংয়ের জন্য সহায়ক।
  3. toString():
    • এটি ত্রুটির বর্ণনা এবং তার ক্লাসের নাম প্রদান করে।

Throwable ক্লাস Java তে ত্রুটি এবং এক্সসেপশন ব্যবস্থাপনার জন্য একটি গুরুত্বপূর্ণ রুট ক্লাস। এটি দুটি প্রধান subclass-এ বিভক্ত: Error এবং Exception। যেখানে Error ক্লাস সাধারণত গুরুতর সিস্টেম ত্রুটি নির্দেশ করে এবং Exception ক্লাস অ্যাপ্লিকেশন সম্পর্কিত ত্রুটিগুলিকে প্রতিনিধিত্ব করে। এই subclass গুলির মাধ্যমে ত্রুটি হ্যান্ডলিং এবং প্রোগ্রামিং ত্রুটিগুলির কার্যকরী সমাধান পাওয়া যায়।

Content added By

Throwable ক্লাস কি এবং এর ভূমিকা

307

Throwable ক্লাস হল java.lang প্যাকেজের একটি গুরুত্বপূর্ণ ক্লাস যা Exception এবং Error শ্রেণীকে সুপারক্লাস হিসেবে ধারণ করে। এটি Java Exception Handling সিস্টেমের মৌলিক অংশ এবং Java প্রোগ্রামে ত্রুটি (Error) এবং ব্যতিক্রম (Exception) পরিচালনা করার জন্য ব্যবহৃত হয়।

Throwable ক্লাসের মাধ্যমে Exception এবং Error দুটি শ্রেণীকে সাধারণভাবে পরিচালনা করা হয়, কারণ এই দুইটি শ্রেণীই Throwable থেকে উত্তরাধিকারসূত্রে পাওয়া ক্লাস।

Throwable ক্লাসের গুরুত্ব:

  1. Exception Handling এর ভিত্তি:
    • Throwable ক্লাস Exception এবং Error শ্রেণীকে একত্রিত করে, যা Java-তে ত্রুটি এবং ব্যতিক্রম ব্যবস্থাপনার জন্য ব্যবহৃত হয়। এটি Java Exception Handling সিস্টেমের মূল কাঠামো হিসেবে কাজ করে।
  2. Throwable এর দুইটি প্রধান সাবক্লাস:
    • Exception: এটি সিস্টেমের ব্যতিক্রমগুলো প্রতিনিধিত্ব করে যা ব্যবহারকারীর কোড দ্বারা পরিচালনা করা সম্ভব। উদাহরণস্বরূপ, IOException, SQLException, NullPointerException ইত্যাদি।
    • Error: এটি JVM বা সিস্টেমের ত্রুটির প্রতিনিধিত্ব করে এবং এগুলো সাধারণত ব্যবহারকারী কোড দ্বারা পরিচালনা করা সম্ভব নয়। উদাহরণস্বরূপ, OutOfMemoryError, StackOverflowError ইত্যাদি।

Throwable ক্লাসের প্রধান বৈশিষ্ট্য:

  1. Throwable ক্লাসের কনস্ট্রাক্টর:
    • Throwable ক্লাসের দুটি কনস্ট্রাক্টর রয়েছে:
      • Throwable(String message): একটি ত্রুটি বার্তা সহ ত্রুটির অবজেক্ট তৈরি করে।
      • Throwable(String message, Throwable cause): একটি ত্রুটি বার্তা এবং অন্য ত্রুটির কারণ সহ ত্রুটির অবজেক্ট তৈরি করে।
  2. getMessage() মেথড:
    • এটি ত্রুটির সংক্ষিপ্ত বার্তা প্রদান করে। এর মাধ্যমে আপনি ত্রুটির কারণে সম্পর্কিত বার্তা পেতে পারেন।
  3. getCause() মেথড:
    • এটি যদি একটি চেইনড এক্সেপশন (chained exception) থাকে, তবে ত্রুটির মূল কারণ প্রদান করে। এটি আপনাকে জানায় কিভাবে বা কোথায় ত্রুটিটি ঘটেছে।
  4. printStackTrace() মেথড:
    • এটি ত্রুটির স্ট্যাক ট্রেস প্রিন্ট করে, যা আপনাকে ত্রুটির বিস্তারিত তথ্য যেমন লাইনের নম্বর, ক্লাস নাম ইত্যাদি দেয়।
  5. toString() মেথড:
    • এটি ত্রুটির বর্ণনা প্রদান করে, সাধারণত getClass().getName() + ": " + getMessage() এর মাধ্যমে।

Throwable ক্লাসের উদাহরণ:

public class ThrowableExample {
    public static void main(String[] args) {
        try {
            // Throwing an Exception
            throw new Exception("This is an exception message");
        } catch (Throwable t) {
            // Catching Throwable
            System.out.println("Caught Throwable: " + t.getMessage());
            t.printStackTrace();  // Print stack trace for debugging
        }
    }
}

আউটপুট:

Caught Throwable: This is an exception message
java.lang.Exception: This is an exception message
    at ThrowableExample.main(ThrowableExample.java:5)

এখানে, Throwable ক্লাসের printStackTrace() মেথড ব্যবহার করা হয়েছে, যা ত্রুটির স্থান (লাইনের নম্বর সহ) প্রদর্শন করছে।

Throwable ক্লাসের দুটি প্রধান সাবক্লাস:

  1. Exception:
    • Exception ক্লাস ত্রুটির একটি শ্রেণী যা প্রোগ্রামের মধ্যে যেকোনো অবস্থা দ্বারা তৈরি হতে পারে, এবং এগুলিকে ব্যবহারকারী প্রোগ্রামার দ্বারা পরিচালনা করা সম্ভব।
    • Checked Exception: এগুলি এমন এক্সেপশন যা কম্পাইল টাইমে ধরতে হয়। যেমন, IOException, SQLException ইত্যাদি।
    • Unchecked Exception: এগুলি রানটাইমে ঘটে এবং এগুলির জন্য বিশেষভাবে ক্যাচ করতে হয় না। যেমন, NullPointerException, ArrayIndexOutOfBoundsException
  2. Error:
    • Error ক্লাস JVM বা সিস্টেম সম্পর্কিত ত্রুটি প্রতিনিধিত্ব করে, যা সাধারণত ব্যবহারকারীর কোড দ্বারা হ্যান্ডেল করা সম্ভব নয়। এগুলি গুরুতর সমস্যা যা অ্যাপ্লিকেশন চালানোকে ব্যাহত করতে পারে।
    • উদাহরণ: OutOfMemoryError, StackOverflowError, VirtualMachineError ইত্যাদি।

Throwable ক্লাসের কিছু গুরুত্বপূর্ণ মেথড:

  1. getMessage(): ত্রুটির বার্তা প্রদান করে।
  2. getCause(): মূল ত্রুটির কারণ বা ব্যতিক্রম প্রদান করে।
  3. printStackTrace(): ত্রুটির স্ট্যাক ট্রেস প্রিন্ট করে, যাতে ত্রুটির স্থান এবং কারণ বোঝা যায়।
  4. toString(): ত্রুটির একটি স্ট্রিং উপস্থাপনা প্রদান করে।

Throwable ক্লাসের ভূমিকা:

  1. Exception Handling Framework: Throwable হল Exception Handling এর ভিত্তি, যা Java-তে ত্রুটি পরিচালনা এবং ত্রুটির ব্যাপারে বিস্তারিত তথ্য পাওয়ার জন্য ব্যবহৃত হয়।
  2. Chained Exceptions: একাধিক ত্রুটি সম্পর্কিত তথ্য প্রদানের জন্য Throwable-এর getCause() মেথড এবং Throwable ক্লাসের ইনস্ট্যান্স চেইনড এক্সেপশনস তৈরিতে ব্যবহৃত হয়।
  3. Debugging and Logging: printStackTrace() এবং toString() মেথডগুলি ডিবাগিং এবং লগিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ, কারণ এগুলি ত্রুটির স্থান এবং বিস্তারিত তথ্য প্রদান করে।

Throwable ক্লাস Java-র Exception Handling সিস্টেমের একটি অপরিহার্য অংশ, যা Exception এবং Error ক্লাসের মাধ্যমে ত্রুটি সম্পর্কিত সমস্ত কার্যাবলী পরিচালনা করে। এর মাধ্যমে ত্রুটি সম্পর্কিত বার্তা, কারণ এবং স্ট্যাক ট্রেস সহজেই পাওয়া যায় এবং Java অ্যাপ্লিকেশন ত্রুটি ব্যবস্থাপনা এবং ডিবাগিংয়ের জন্য গুরুত্বপূর্ণ সহায়তা প্রদান করে।

Content added By

Exception এবং Error এর মধ্যে পার্থক্য

245

Java তে Exception এবং Error দুটি অত্যন্ত গুরুত্বপূর্ণ ক্লাস যা Throwable ক্লাস থেকে ইন্সপায়ার হয়, এবং দুটি ভিন্ন ধরণের অবস্থা প্রতিনিধিত্ব করে যা প্রোগ্রাম চলাকালে ঘটে। এরা Java.lang প্যাকেজের অংশ। তবে, এগুলির মধ্যে কিছু মৌলিক পার্থক্য রয়েছে যা গুরুত্বপূর্ণ:

Throwable ক্লাস:

  • Throwable হল একমাত্র সুপারক্লাস যা Exception এবং Error ক্লাসের প্যারেন্ট। এটি Java তে এমন সমস্ত অবস্থা বা অবজেক্টের রুট ক্লাস যা ধরা (caught) বা ফেলে দেওয়া (thrown) হতে পারে।

Exception:

  • Exception হল এমন একটি অবস্থা যা প্রোগ্রামের সাধারণ কার্যকারিতায় ব্যাঘাত সৃষ্টি করে এবং যা সাধারণত ব্যবহারকারী বা প্রোগ্রামারের ত্রুটি দ্বারা ঘটতে পারে।
  • Exception-এর মধ্যে দুটি প্রধান শ্রেণী রয়েছে:
    1. Checked Exceptions: এ ধরনের এক্সসেপশনগুলি কম্পাইল টাইমে চেক করা হয় এবং সেগুলি থ্রো করার জন্য কোডে try-catch ব্লক ব্যবহার করা বা throws কিওয়ার্ড ব্যবহার করা বাধ্যতামূলক। উদাহরণ: IOException, SQLException, ClassNotFoundException
    2. Unchecked Exceptions (Runtime Exceptions): এই এক্সসেপশনগুলি রানটাইমে ঘটে এবং RuntimeException বা তার সাবক্লাস দ্বারা প্রতিনিধিত্ব করা হয়। উদাহরণ: NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException

Error:

  • Error হল এমন একটি অবস্থা যা সাধারণত Java ভার্চুয়াল মেশিন (JVM) বা সিস্টেমের অবস্থা দ্বারা ঘটতে পারে এবং এটি সাধারনত থ্রো করা হয় না। এটি প্রোগ্রামের নিয়ন্ত্রণের বাইরে থাকে এবং সাধারণত এটি Error বা তার সাবক্লাস দ্বারা প্রতিনিধিত্ব করা হয়।
  • Error-এর মধ্যে OutOfMemoryError, StackOverflowError এবং VirtualMachineError এর মতো গুরুতর সিস্টেম সম্পর্কিত ত্রুটিগুলি অন্তর্ভুক্ত থাকে।

Exception এবং Error এর মধ্যে পার্থক্য:

বৈশিষ্ট্যExceptionError
Definitionপ্রোগ্রামের কার্যক্রমে ব্যাঘাত সৃষ্টি করে এবং এটি catchableসিস্টেম সম্পর্কিত গুরুতর ত্রুটি যা সাধারনত catchable নয়।
Handlingসাধারণত try-catch ব্লক দ্বারা হ্যান্ডেল করা হয়।এটি সাধারণত হ্যান্ডেল করা সম্ভব নয়, এবং প্রোগ্রাম থামতে পারে।
SubclassException এবং তার উপশ্রেণী যেমন RuntimeException, IOExceptionError এবং তার উপশ্রেণী যেমন OutOfMemoryError, StackOverflowError
Causeপ্রোগ্রামিং ভুল, অস্বাভাবিক ইনপুট বা ব্যবহারকারীর ত্রুটি।JVM এর সমস্যা বা সিস্টেমের অবস্থা।
ExamplesNullPointerException, IOException, SQLException, ArithmeticExceptionOutOfMemoryError, StackOverflowError, VirtualMachineError
Recoverableবেশিরভাগ ক্ষেত্রে পুনরুদ্ধারযোগ্য, কোডের মাধ্যমে ঠিক করা যায়।এটি সাধারণত পুনরুদ্ধারযোগ্য নয়, সিস্টেম ক্র্যাশ ঘটাতে পারে।
Example Usageব্যবহারকারীর ভুল ইনপুট বা মিসিং ফাইলের কারণে ঘটে।JVM এর মেমরি বা স্ট্যাক সীমা অতিক্রম করার কারণে ঘটে।

Exception এর উদাহরণ:

public class ExceptionExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;  // ArithmeticException will occur
        } catch (ArithmeticException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

আউটপুট:

Error: / by zero

এখানে, ArithmeticException একটি RuntimeException যা Unchecked Exception হিসেবে ধরা হয় এবং এটি try-catch ব্লক দ্বারা হ্যান্ডেল করা হয়েছে।

Error এর উদাহরণ:

public class ErrorExample {
    public static void main(String[] args) {
        try {
            // Creating a large array to simulate OutOfMemoryError
            int[] largeArray = new int[Integer.MAX_VALUE];
        } catch (Error e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

আউটপুট:

Error: Java heap space

এখানে, OutOfMemoryError একটি Error যা JVM মেমরি সীমা অতিক্রম করার কারণে ঘটেছে। এটি সাধারণত হ্যান্ডেল করা সম্ভব নয় এবং প্রোগ্রামটি থামতে পারে।

  • Exception এমন একটি অবস্থা যা প্রোগ্রাম চলার সময়ে ঘটতে পারে এবং সাধারণত catchable হয়, অর্থাৎ এটি try-catch ব্লক ব্যবহার করে হ্যান্ডেল করা যায়।
  • Error সাধারণত সিস্টেমের অবস্থা বা JVM এর ত্রুটি দ্বারা ঘটে এবং এটি catchable নয়, সাধারণত এটি গুরুতর সমস্যা সৃষ্টি করে যা প্রোগ্রাম থামাতে পারে।
  • Java তে Exception-এর মধ্যে Checked এবং Unchecked ধরনের বিভাজন রয়েছে, তবে Error সাধারণত Unchecked থাকে এবং এটি গুরুতর সিস্টেম ত্রুটি নির্দেশ করে।
Content added By

Common Error ক্লাসসমূহ: StackOverflowError, OutOfMemoryError

214

Java প্রোগ্রামিংয়ে Error ক্লাসসমূহ এমন সমস্যা বা ত্রুটি নির্দেশ করে যা সাধারণত অ্যাপ্লিকেশনের চলার সময় ঘটে এবং এর সমাধান সাধারনত JVM (Java Virtual Machine) বা operating system দ্বারা করা হয়। StackOverflowError এবং OutOfMemoryError হল Java-র সাধারণ Error ক্লাস, যা সাধারণত জাভা প্রোগ্রামের চলার সময় দেখা দেয়।

1. StackOverflowError:

StackOverflowError হল একটি Error যা ঘটে যখন call stack এর ধারণক্ষমতা (capacity) শেষ হয়ে যায়, অর্থাৎ স্ট্যাকের মধ্যে সঞ্চিত method calls এবং local variables জায়গা কম পড়তে থাকে। এটি সাধারণত recursion বা পুনরাবৃত্তি (repeated function calls) এর ফলে ঘটে, যখন একটি মেথড অতিরিক্ত গভীরে বা অবিরামভাবে নিজেকে কল করতে থাকে।

ব্যাখ্যা:

Java-তে যখন একটি মেথড কল করা হয়, তখন সেই মেথডের সমস্ত তথ্য (যেমন প্যারামিটার, লোকাল ভেরিয়েবল) স্ট্যাক মেমরিতে সঞ্চিত হয়। যখন একাধিক মেথড একে অপরকে কল করে (যেমন রিকার্সন), এবং স্ট্যাক মেমরি পূর্ণ হয়ে যায়, তখন StackOverflowError ঘটে।

কখন ঘটে:

  • যখন কোনো মেথড নিজের মধ্যে পুনরাবৃত্তি হয়, অর্থাৎ এটি নিজেই নিজেকে কল করে (recursive method call) এবং থামার কোন শর্ত থাকে না।

উদাহরণ:

public class StackOverflowExample {
    public static void recursiveMethod() {
        recursiveMethod();  // Method calling itself (infinite recursion)
    }

    public static void main(String[] args) {
        recursiveMethod();
    }
}

Output:

Exception in thread "main" java.lang.StackOverflowError

সমাধান:

  • মেথডের base condition (বা terminating condition) যুক্ত করা যা নিশ্চিত করে যে রিকার্সন একটি নির্দিষ্ট অবস্থায় থেমে যাবে।
  • পর্যাপ্ত স্ট্যাক মেমরি ব্যবহার নিশ্চিত করতে হবে এবং recursion depth কমাতে হবে।

2. OutOfMemoryError:

OutOfMemoryError হল একটি Error যা তখন ঘটে যখন Java heap space বা method area পূর্ণ হয়ে যায় এবং JVM নতুন অবজেক্ট তৈরি করার জন্য পর্যাপ্ত মেমরি খুঁজে পায় না। এটি Java heap space বা permgen space (Java 8 থেকে metaspaces) এর সীমা ছাড়িয়ে যাওয়ার কারণে ঘটে।

ব্যাখ্যা:

Java heap হলো JVM এর একটি মেমরি এরিয়া যেখানে নতুন অবজেক্ট তৈরি করা হয়। যখন অ্যাপ্লিকেশন অনেক বেশি অবজেক্ট তৈরি করতে থাকে এবং সেই অবজেক্টগুলির মেমরি মুক্ত না হয় (যেমন garbage collection না হওয়া), তখন OutOfMemoryError ঘটে। এটি বেশিরভাগ ক্ষেত্রেই হয় যখন অ্যাপ্লিকেশন দীর্ঘ সময় ধরে রান করে এবং অবজেক্টগুলি পরিষ্কার হয় না।

কখন ঘটে:

  • যখন garbage collector মেমরি মুক্ত করতে পারছে না বা অবজেক্টগুলি খুব বেশি হয়ে যাচ্ছে।
  • যখন অ্যাপ্লিকেশনে memory leaks থাকে, অর্থাৎ অবজেক্টগুলি মেমরি থেকে মুক্ত হতে পারছে না কারণ সেগুলি অ্যাক্সেসযোগ্য অবস্থায় থাকে।
  • যখন নির্ধারিত heap size এর বাইরে অ্যাপ্লিকেশন মেমরি চাচ্ছে।

উদাহরণ:

public class OutOfMemoryExample {
    public static void main(String[] args) {
        // Creating large number of objects that fill the heap
        int[] largeArray = new int[Integer.MAX_VALUE];
    }
}

Output:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

সমাধান:

  • Garbage collection নিশ্চিত করতে এবং memory leaks কমানোর জন্য কোডে অবজেক্ট রেফারেন্সগুলো সঠিকভাবে ফ্রি করতে হবে।
  • Heap size বৃদ্ধি করতে হতে পারে, JVM অপশন -Xmx ব্যবহার করে:

    java -Xmx512m YourClass  // Set max heap size to 512MB
    
  • Profiling tools ব্যবহার করা, যেমন JProfiler বা VisualVM, যা মেমরি ব্যবহারের ট্র্যাক রাখে এবং সম্ভাব্য মেমরি লিক শনাক্ত করতে সাহায্য করে।

StackOverflowError এবং OutOfMemoryError এর মধ্যে পার্থক্য:

বৈশিষ্ট্যStackOverflowErrorOutOfMemoryError
কারণCall stack overflow due to deep recursion or infinite method calls.Insufficient heap space for creating new objects.
তথ্যHappens in the call stack.Happens in the heap space or method area.
সম্পর্কিতRecursion depth exceeds the available stack size.Too many objects created or memory leaks causing insufficient space.
সাধারণ সমাধানEnsure proper base condition for recursion.Increase heap size or fix memory leaks.
ধরা পড়ার অবস্থানসাধারণত stack overflow (recursive calls).Heap memory overflow (when object creation fails).

Java-তে StackOverflowError এবং OutOfMemoryError দুটি সাধারণ Error যা বিভিন্ন কারণে ঘটতে পারে, তবে এই দুইটি ভিন্ন ধরনের সমস্যা নির্দেশ করে। StackOverflowError সাধারণত গভীর বা অবিরাম রিকার্সনের কারণে ঘটে, এবং OutOfMemoryError সাধারণত JVM এর heap বা memory space পূর্ণ হয়ে যাওয়ার কারণে ঘটে। এই ত্রুটিগুলির সমাধান করার জন্য কোডে উন্নত memory management, garbage collection, এবং recursion management এর দিকে মনোযোগ দেওয়া উচিত।

Content added By

Custom Exception তৈরি করা

222

Custom exceptions হল সেই ধরনের exceptions যা আপনি আপনার নিজের প্রয়োজনে তৈরি করেন। Java তে exception handling এর জন্য Exception অথবা RuntimeException ক্লাসগুলির subclass তৈরি করা হয়, যাতে আপনি নির্দিষ্ট সমস্যা বা ত্রুটির জন্য নিজস্ব exception তৈরি করতে পারেন। Custom exceptions প্রোগ্রামিং এর ক্ষেত্রে খুবই গুরুত্বপূর্ণ, কারণ এগুলি আপনাকে নির্দিষ্ট ত্রুটি শর্তাবলী সম্পর্কিত বার্তা বা আচরণ কাস্টমাইজ করতে সহায়ক হয়।

Custom Exception তৈরি করার প্রক্রিয়া:

Java তে custom exception তৈরি করতে, আপনাকে একটি নতুন class তৈরি করতে হবে যা Exception অথবা RuntimeException ক্লাসের সাবক্লাস হবে। সাধারণত, custom exception এ constructor, message, এবং cause মেসেজ হ্যান্ডলিং এর জন্য কাস্টম ফিচার সংযুক্ত করা হয়।

Custom Exception তৈরি করার উদাহরণ (Checked Exception):

// Custom checked exception by extending Exception
public class InvalidAgeException extends Exception {
    
    // Default constructor
    public InvalidAgeException() {
        super("Invalid age provided.");
    }

    // Constructor that accepts a custom error message
    public InvalidAgeException(String message) {
        super(message);
    }
}

Explanation:

  • InvalidAgeException হল একটি custom exception যা Exception ক্লাস থেকে ইনহেরিট করা হয়েছে।
  • এতে একটি ডিফল্ট কনস্ট্রাক্টর এবং একটি কাস্টম মেসেজ প্যারামিটার সহ কনস্ট্রাক্টর রয়েছে।

Usage Example:

import java.util.Scanner;

public class TestCustomException {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter age: ");
        int age = scanner.nextInt();

        try {
            if (age < 18) {
                // Throwing the custom exception if age is less than 18
                throw new InvalidAgeException("Age must be 18 or older.");
            }
            System.out.println("Valid age.");
        } catch (InvalidAgeException e) {
            // Catching and handling the custom exception
            System.out.println("Caught Exception: " + e.getMessage());
        }
    }
}

Output:

Enter age: 15
Caught Exception: Age must be 18 or older.

Custom Exception (Unchecked Exception):

এছাড়া, আপনি Unchecked Exceptions তৈরি করতে RuntimeException ক্লাস থেকেও ইনহেরিট করতে পারেন। Unchecked exceptions সাধারণত runtime errors বা logic errors কে প্রতিনিধিত্ব করে এবং এটি try-catch ব্লকে handle করার বাধ্যবাধকতা নেই।

Custom Unchecked Exception Example:

// Custom unchecked exception by extending RuntimeException
public class InvalidNumberException extends RuntimeException {

    // Default constructor
    public InvalidNumberException() {
        super("Invalid number input.");
    }

    // Constructor that accepts a custom error message
    public InvalidNumberException(String message) {
        super(message);
    }
}

Explanation:

  • InvalidNumberException হল একটি unchecked exception যা RuntimeException থেকে ইনহেরিট করা হয়েছে।
  • এতে একটি ডিফল্ট কনস্ট্রাক্টর এবং একটি কাস্টম মেসেজ প্যারামিটার সহ কনস্ট্রাক্টর রয়েছে।

Usage Example:

import java.util.Scanner;

public class TestUncheckedCustomException {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter a positive number: ");
        int number = scanner.nextInt();

        if (number < 0) {
            // Throwing the custom unchecked exception
            throw new InvalidNumberException("Number cannot be negative.");
        }
        
        System.out.println("Valid number entered: " + number);
    }
}

Output:

Enter a positive number: -5
Exception in thread "main" InvalidNumberException: Number cannot be negative.
    at TestUncheckedCustomException.main(TestUncheckedCustomException.java:9)

Custom Exception কাস্টমাইজেশন (Additional Methods and Fields):

আপনি চাইলে আপনার custom exception এ আরও কাস্টম ফিল্ড বা মেথড যোগ করতে পারেন, যেমন:

  • Error codes: নির্দিষ্ট ত্রুটির কোড প্রদান।
  • Additional data: কাস্টম exception এর সাথে আরও ডাটা যুক্ত করা (যেমন, error time বা stack trace তথ্য)।

Custom Exception with Additional Fields:

public class InsufficientBalanceException extends Exception {

    private double balance;
    
    // Constructor with message and balance
    public InsufficientBalanceException(String message, double balance) {
        super(message);
        this.balance = balance;
    }

    // Method to get the balance at the time of exception
    public double getBalance() {
        return balance;
    }
}

Usage Example:

public class TestCustomExceptionWithData {

    public static void main(String[] args) {
        double accountBalance = 5000.0;
        double withdrawalAmount = 6000.0;

        try {
            if (withdrawalAmount > accountBalance) {
                throw new InsufficientBalanceException("Insufficient balance for withdrawal.", accountBalance);
            }
            System.out.println("Withdrawal successful.");
        } catch (InsufficientBalanceException e) {
            System.out.println(e.getMessage() + " Current balance: " + e.getBalance());
        }
    }
}

Output:

Insufficient balance for withdrawal. Current balance: 5000.0
  • Custom Exceptions Java তে বিশেষ ত্রুটি হ্যান্ডলিং এর জন্য খুবই কার্যকরী। আপনি checked exceptions বা unchecked exceptions তৈরি করতে পারেন, যা আপনার অ্যাপ্লিকেশনের নির্দিষ্ট সমস্যাগুলির জন্য উপযোগী হবে।
  • Checked exceptions এমন ত্রুটির জন্য ব্যবহার করা হয় যেগুলি প্রোগ্রামটি কম্পাইল করার সময় ধরতে হয়, যেমন ফাইল খোলার সময় কোনো সমস্যা হলে।
  • Unchecked exceptions সাধারণত runtime ত্রুটির জন্য ব্যবহৃত হয়, যেমন ডিভাইসের ইনপুট সমস্যা বা অ্যারের সীমার বাইরে অ্যাক্সেস।

Java তে custom exceptions তৈরি করার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশন আরও robust, readable, এবং রক্ষণাবেক্ষণযোগ্য করতে পারেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...